package com.billard.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@Slf4j
/***
 * Redis 是一个 内存键值存储系统，它底层只存储 byte[]（字节数组），
 * 而不是直接存储 Java 对象。这使得 Redis 可以在内存中快速读写数据，
 * 但也要求我们在使用时手动进行序列化和反序列化。
 * **/
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
        log.info("开始创建redis模版对象");
        RedisTemplate<String, Object> template = new RedisTemplate<>();//Key-value
        template.setConnectionFactory(connectionFactory);

        // 使用 GenericJackson2JsonRedisSerializer（推荐）
        template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());

        // 单独设置 key 为 String 序列化
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());

        // 单独设置 value 为 String 序列化
        template.setValueSerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new StringRedisSerializer());


        template.afterPropertiesSet();
        return template;
    }
}
